import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *


class Table(QTableWidget):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setRowCount(10)
        self.setColumnCount(10)
        # etc.

    # def keyPressEvent(self, event):
    #     super().keyPressEvent(event)
    #     if event.key() == Qt.Key_C and (event.modifiers() & Qt.ControlModifier):
    #         self.copied_cells = sorted(self.selectedIndexes())
    #     elif event.key() == Qt.Key_V and (event.modifiers() & Qt.ControlModifier):
    #         r = self.currentRow() - self.copied_cells[0].row()
    #         c = self.currentColumn() - self.copied_cells[0].column()
    #         for cell in self.copied_cells:
    #             self.setItem(cell.row() + r, cell.column() + c, QTableWidgetItem(cell.data()))

    def keyPressEvent(self, event):
        """ Ctrl + C复制表格内容 """
        if event.modifiers() == Qt.ControlModifier and event.key() == Qt.Key_C:
            # 获取表格的选中行
            selected_ranges = self.selectedRanges()[0]  # 只取第一个数据块,其他的如果需要要做遍历,简单功能就不写得那么复杂了
            text_str = ""  # 最后总的内容
            # 行（选中的行信息读取）
            for row in range(selected_ranges.topRow(), selected_ranges.bottomRow() + 1):
                row_str = ""
                # 列（选中的列信息读取）
                for col in range(selected_ranges.leftColumn(), selected_ranges.rightColumn() + 1):
                    item = self.show_table.item(row, col)
                    row_str += item.text() + '\t'  # 制表符间隔数据
                text_str += row_str + '\n'  # 换行
            clipboard = qApp.clipboard()  # 获取剪贴板
            clipboard.setText(text_str)  # 内容写入剪贴板


if __name__ == '__main__':
    app = QApplication(sys.argv)
    gui = Table()
    gui.show()
    sys.exit(app.exec_())
